package com.hsqn.entity;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MealOrder {
    /**
     * 订单ID（主键，自增）
     * 对应表字段：id
     */
//    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 订单编号（唯一，非空）
     * 对应表字段：order_no
     */
    @NotNull(message = "订单编号不能为空")
    private String orderNo;

    /**
     * 老人ID（非空）
     * 对应表字段：elderly_id
     */
    @NotNull(message = "老人ID不能为空")
    private Long elderlyId;

    /**
     * 用餐日期（非空）
     * 对应表字段：meal_date
     */
    @NotNull(message = "用餐日期不能为空")
    private LocalDate mealDate;

    /**
     * 餐型（1-早餐，2-午餐，3-晚餐，非空）
     * 对应表字段：meal_type
     */
    @NotNull(message = "餐型不能为空")
    private Integer mealType;

    /**
     * 菜单ID（关联 menu_info 表，非空）
     * 对应表字段：menu_id
     */
    @NotNull(message = "菜单ID不能为空")
    private Long menuId;

    /**
     * 数量（默认1，非空）
     * 对应表字段：quantity
     */
    @NotNull(message = "订单数量不能为空")
    private Integer quantity = 1;

    /**
     * 单价（非空，大于0）
     * 对应表字段：price
     */
    @NotNull(message = "单价不能为空")
    @DecimalMin(value = "0.01", message = "单价必须大于0")
    @Digits(integer = 8, fraction = 2, message = "单价格式错误（最多8位整数，2位小数）")
    private BigDecimal price;

    /**
     * 总金额（非空，大于0）
     * 对应表字段：total_amount
     */
    @NotNull(message = "总金额不能为空")
    @DecimalMin(value = "0.01", message = "总金额必须大于0")
    @Digits(integer = 10, fraction = 2, message = "总金额格式错误（最多10位整数，2位小数）")
    private BigDecimal totalAmount;

    /**
     * 订单状态（0-待确认，1-已确认，2-已取消，3-已完成，默认0）
     * 对应表字段：order_status
     */
    private Integer orderStatus = 0;

    /**
     * 支付状态（0-未支付，1-已支付，默认0）
     * 对应表字段：payment_status
     */
    private Integer paymentStatus = 0;

    /**
     * 送餐地址（非空）
     * 对应表字段：delivery_address
     */
    @NotNull(message = "送餐地址不能为空")
    private String deliveryAddress;

    /**
     * 联系电话（非空，格式校验）
     * 对应表字段：contact_phone
     */
    @NotNull(message = "联系电话不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系电话格式错误（请输入11位手机号）")
    private String contactPhone;

    /**
     * 创建时间（默认当前时间）
     * 对应表字段：create_time
     */
    private LocalDateTime createTime;

    /**
     * 更新时间（自动更新）
     * 对应表字段：update_time
     */
    private LocalDateTime updateTime;
}
